0643. 子数组最大平均数 I【简单】
1. 📝 题目描述
给你一个由 n 个元素组成的整数数组 nums 和一个整数 k。
请你找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10^-5 的答案都将被视为正确答案。
示例 1:
txt
输入:nums = [1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.751
2
3
2
3
示例 2:
txt
输入:nums = [5], k = 1
输出:5.000001
2
2
提示:
n == nums.length1 <= k <= n <= 10^5-10^4 <= nums[i] <= 10^4
2. 🎯 s.1 - 滑动窗口
js
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var findMaxAverage = function (nums, k) {
// 计算前 k 个元素的和
let sum = 0
for (let i = 0; i < k; i++) {
sum += nums[i]
}
let maxSum = sum
// 滑动窗口
for (let i = k; i < nums.length; i++) {
sum = sum - nums[i - k] + nums[i]
maxSum = Math.max(maxSum, sum)
}
return maxSum / k
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- 时间复杂度:
,遍历数组一次 - 空间复杂度:
,只使用常数空间
算法思路:
- 使用滑动窗口维护长度为 k 的子数组和
- 先计算前 k 个元素的和作为初始窗口
- 窗口向右滑动,减去左边移出的元素,加上右边新进入的元素
- 记录滑动过程中的最大和
- 返回最大和除以 k 得到最大平均数